#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QCheckBox>
#include <QFileDialog>
#include <QVBoxLayout>
#include <QProgressBar>
#include <QTimer>
#include <QTimeEdit>
#include <QSpinBox>
#include <QListWidget> // 添加列表控件头文件
#include "backupmanager.h"
#include "syncmanager.h"
#include "settings.h"
#include "taskmanager.h"
#include <QComboBox>
#include <QTextEdit>

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void onBrowseSource();   // 源目录浏览
    void onBrowseTarget();   // 目标目录浏览
    void onBackupButtonClicked(); // 同步按钮点击槽函数
    void onSyncButtonClicked();  // 同步按钮点击槽函数
    void onAutoBackupTimer();
    void updateProgress(int progress);
    void updateSyncProgress(int progress);
    void onAutoBackupCheckBoxToggled(bool checked);
    void synconBrowseSource();  // 同步源目录浏览
    void synconBrowseTarget();  // 同步目标目录浏览
    void onBackupLogMessage(const QString &message);  // 备份日志消息处理槽函数
    void onSyncLogMessage(const QString &message);  // 同步日志消息处理槽函数
    void onCreateTaskButtonClicked();  // 新增：创建任务按钮点击槽函数
    void onTaskTypeSelected(int index);  // 新增：任务类型选择槽函数
    void startAllTaskButtonClicked(); //一键执行任务队列中所有任务
    void onStartTaskButtonClicked(); // 执行光标选中的任务


protected:
    void closeEvent(QCloseEvent *event) override;

private:
    QVBoxLayout *mainLayout;
    QVBoxLayout *rightLayout;
    BackupManager *backupManager; //备份管理器
    SyncManager *syncManager;  // 同步管理器
    TaskManager *taskManager;  // 任务管理器
    Settings *settings;
    QLineEdit *sourceDirLineEdit;
    QLineEdit *targetDirLineEdit;
    QCheckBox *incrementalCheckBox;
    QCheckBox *resolveConflictsCheckBox;
    QPushButton *browseSourceButton;
    QPushButton *browseTargetButton;
    QPushButton *backupButton;
    QPushButton *syncStartButton;
    QPushButton *syncButton;
    QCheckBox *autoBackupCheckBox;
    QTimeEdit *autoBackupTimeEdit;
    QTimer *autoBackupTimer;
    QProgressBar *progressBar;
    QProgressBar *syncProgressBar;
    QSpinBox *maxThreadsSpinBox;  // 最大线程数选择框
    QWidget *backupWidget;
    QWidget *syncWidget;
    QLineEdit *syncSourceDirLineEdit;  // 新增同步源目录编辑框
    QLineEdit *syncTargetDirLineEdit;  // 新增同步目标目录编辑框
    QFile backupLogFile;    // 备份日志文件
    QFile syncLogFile;      // 同步日志文件
    QTextStream backuplogStream;  // 备份日志流
    QTextStream synclogStream;    // 备份日志流
    QTextEdit *logDisplay; // 保存日志控件的引用
    QString logFilePath_;
    QListWidget *taskQueueList;  // 任务队列列表控件
    QListWidget *taskQueueFinishList; // 任务队列列表完成控件
    QQueue<QPair<QString, QString>> taskQueue;  // 任务队列
    QMutex mutex;  // 互斥锁
    QWaitCondition waitCondition;  // 等待条件
    bool isProcessing;  // 标记是否正在处理任务
    QPushButton *createTaskButton;  // 新增：创建任务按钮
    QComboBox *taskTypeComboBox;  // 新增：任务类型下拉框


    void createUI();
    void loadSettings();
    void saveSettings();
    void startAutoBackupTimer();
    void stopAutoBackupTimer();
    void initializeBackupLogFile();  // 初始化备份日志文件
    void initializeSyncLogFile();  // 初始化同步日志文件
    void loadLogsIntoWidget(const QString &filePath);
    enum LogType {
        Backup,
        Sync
    };
    void logMessage(const QString &message, LogType type);  // 记录日志消息



};

#endif // MAINWINDOW_H
